#version 330 core
// vim: set filetype=cpp :vim

layout(lines) in;
layout(triangle_strip, max_vertices=12) out;

uniform mat4 mProj;
uniform float umpp;

flat in int nid[];
in float outr[];

flat out vec3 cent0;
flat out vec3 cent1;
out vec2 vpos;
out vec3 vnorm;

flat out int nid0;

void main(void) {
	cent0=gl_in[0].gl_Position.xyz/gl_in[0].gl_Position.w;
	cent1=gl_in[1].gl_Position.xyz/gl_in[1].gl_Position.w;

	nid0=nid[0];

	vec2 u=cent1.xy-cent0.xy;
	float l=length(u);
	if(l<umpp) {
		vec2 cent;
		float z;
		cent=cent0.xy;
		z=cent0.z;
		vpos=cent+vec2(umpp, umpp);
		gl_Position=mProj*vec4(vpos, z, 1.0);
		EmitVertex();
		vpos=cent+vec2(umpp, -umpp);
		gl_Position=mProj*vec4(vpos, z, 1.0);
		EmitVertex();
		vpos=cent+vec2(-umpp, umpp);
		gl_Position=mProj*vec4(vpos, z, 1.0);
		EmitVertex();
		vpos=cent+vec2(-umpp, -umpp);
		gl_Position=mProj*vec4(vpos, z, 1.0);
		EmitVertex();
	} else 
	{
		u=u/l;
		vec2 v=vec2(-u.y, u.x);
		vnorm =vec3(0,1,0);
		vpos=cent1.xy+u*umpp+1.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent1.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,1,0);
		vpos=cent0.xy+u*umpp+1.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,1,1);
		vpos=cent1.xy+u*umpp+0.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent1.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,1,1);
		vpos=cent0.xy+u*umpp+0.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,-1,1);
		vpos=cent1.xy+u*umpp-0.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent1.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,-1,1);
		vpos=cent0.xy+u*umpp-0.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,-1,0);
		vpos=cent1.xy+u*umpp-1.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent1.z, 1.0);
		EmitVertex();

		vnorm =vec3(0,-1,0);
		vpos=cent0.xy+u*umpp-1.5*v*umpp;
		gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		EmitVertex();
		//vpos=cent0.xy-u*umpp+v*umpp;
		//gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		//EmitVertex();
		//vpos=cent0.xy-u*umpp-v*umpp;
		//gl_Position=mProj*vec4(vpos, cent0.z, 1.0);
		//EmitVertex();
	}
	EndPrimitive();
}

